package org.usmile.algorithms.leetcode.simple;

/**
 * 541. 反转字符串 II
 *
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 *
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 *
 *
 * 示例 1：
 *
 * 输入：s = "abcdefg", k = 2
 * 输出："bacdfeg"
 * 示例 2：
 *
 * 输入：s = "abcd", k = 2
 * 输出："bacd"
 *
 *
 * 提示：
 *
 * 1 <= s.length <= 104
 * s 仅由小写英文组成
 * 1 <= k <= 104
 */
public class _0541 {
}

class _0541_Solution {
    public String reverseStr(String s, int k) {
        if (k == 1) {
            return s;
        }
        char[] chars = s.toCharArray();
        for (int start = 0; start < s.length(); start += 2*k) {
            int left = start;
            int right = Math.min(start + k - 1, s.length() - 1);
            while (left < right) {
                char temp = chars[right];
                chars[right] = chars[left];
                chars[left] = temp;

                left++;
                right--;
            }
        }

        return new String(chars);
    }
}